package cn.itcast.nems.order.dto.message;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 * 创建订单 消息实体
 * 包含字段:主租户ID、子租户ID、业务线ID、客户ID、订单ID、订单编号、订单业务编号、订单办理日期、订单创建日期、订单总金额、订单优惠金额、订单应付金额
 * </p>
 *
 * @author zhouwei
 * @since 2023/10/26 3:36 PM
 **/
@Data
@NoArgsConstructor
public class OrderCreatedMessageDTO implements Serializable {
    /**
     * 业务线ID
     */
    private Integer businessLineId;
    /**
     * 客户ID
     */
    private String customerId ;
    /**
     * 订单ID
     */
    private String orderId ;

    /**
     * 订单行ID LIST
     */
    private List<String> orderLineIds ;
    /**
     * 订单编号
     */
    private String orderNo ;
    /**
     * 业务订单编号，需要接入方传递。要求主租户内唯一。
     */
    private String bizOrderNo;

    /**
     * 业务日期：存在单据录入日期和实际业务发生日期不一致的情况。用来业务补录时记录实际发生日期。
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(shape = JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd")
    private LocalDateTime bizDate;
    /**
     * 创建时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(shape = JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createdDatetime;
    /**
     * 订单原金额总额。单位：分。
     */
    private Integer originalAmount;

    /**
     * 优惠总额。单位：分
     */
    private Integer discountAmount;

    /**
     * 应付金额=订单原金额-优惠总额。单位：分。
     */
    private Integer amountDue;
    /**
     * 主租户ID
     */
    private Integer tenantId;

    /**
     * 子租户ID
     */
    private Integer subtenantId;
    /**
     * 新报名、升级、转班、重读/留级
     */
    private String source ;
    /**
     * 插班日期
     */
    private LocalDate theFreshDate;
    /**
     * 立即生效学籍
     */
    private Boolean effectImmediately;

    /**
     * 创建者email
     */
    private String operatorEmail;

    /**
     * 老EMS studentjoinclass 主键  ，  不能支持多阶段情况
     */
    private Integer joinClassId ;

}
